home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / modula.arc / SIERPINS.MOD < prev    next >
Text File  |  1985-05-30  |  1KB  |  70 lines

  1. MODULE sierpinski;
  2.  
  3. FROM Terminal    IMPORT Read;
  4. FROM LineDrawing IMPORT width, height, Px, Py, clear, line;
  5.  
  6. CONST SquareSize = 512;
  7.  
  8. VAR i,h,x0,y0: CARDINAL;
  9.     ch: CHAR;
  10.  
  11. PROCEDURE A(k: CARDINAL);
  12. BEGIN
  13.   IF k > 0 THEN
  14.     A(k-1); line(7,h);
  15.     B(k-1); line(0,2*h);
  16.     D(k-1); line(1,h);
  17.     A(k-1)
  18.   END
  19. END A;
  20.  
  21. PROCEDURE B(k: CARDINAL);
  22. BEGIN
  23.   IF k > 0 THEN
  24.     B(k-1); line(5,h);
  25.     C(k-1); line(6,2*h);
  26.     A(k-1); line(7,h);
  27.     B(k-1)
  28.   END
  29. END B;
  30.  
  31. PROCEDURE C(k: CARDINAL);
  32. BEGIN
  33.   IF k > 0 THEN
  34.     C(k-1); line(3,h);
  35.     D(k-1); line(4,2*h);
  36.     B(k-1); line(5,h);
  37.     C(k-1)
  38.   END
  39. END C;
  40.  
  41. PROCEDURE D(k: CARDINAL);
  42. BEGIN
  43.   IF k > 0 THEN
  44.     D(k-1); line(1,h);
  45.     A(k-1); line(2,2*h);
  46.     C(k-1); line(3,h);
  47.     D(k-1)
  48.   END
  49. END D;
  50.  
  51. BEGIN
  52.   clear; i := 0;
  53.   h := SquareSize DIV 4;
  54.   x0 := CARDINAL(width) DIV 2;
  55.   y0 := CARDINAL(height) DIV 2 + h;
  56.   REPEAT
  57.     INC(i);
  58.     x0 := x0-h;
  59.     h := h DIV 2;
  60.     y0 := y0 + h;
  61.     Px := x0; Py := y0;
  62.     A(i); line(7,h);
  63.     B(i); line(5,h);
  64.     C(i); line(3,h);
  65.     D(i); line(1,h);
  66.     Read(ch)
  67.   UNTIL (i = 6) OR (ch = 33C);
  68.   clear
  69. END sierpinski.
  70.